/*
 * FilterChain.h
 *
 *  Created on: 10 Nov 2012
 *      Author: hopey
 */

#ifndef FILTERCHAIN_H_
#define FILTERCHAIN_H_
#include <opencv2/core/core.hpp>
#include <vector>
#include "../filters/Filter.h"
#include <cstdarg>

namespace openlid {

class FilterChain {
public:
	FilterChain();
	FilterChain(const filter_ptr& fp, ...) {
//		for(const auto& ptr : init_filters)
//			add_filter(ptr);
	}
	virtual ~FilterChain();
	cv::Mat apply(const cv::Mat& source);
	void add_filter(filter_ptr filter);
	//I'm not sure this is a good idea...
	void add_filter(Filter* filter) {
		add_filter(filter_ptr(filter));
	}
private:
	/*
	 * Not sure if I want a shared or unique pointer here...
	 */
	vector<filter_ptr > filters;
};

} /* namespace openlid */
#endif /* FILTERCHAIN_H_ */
